from scrapy import *
from ..items import *
from ..utile.HTTPUtile import *

# 广西桂林市公共资源交易中心 #

# 招投标交易动态，通知公告，政策法规，交易信息
class glsggzyjyzx_ztzj_Spider(Spider):

    # 爬虫名
    name = 'glsggzyjyzx_ztzj'
    # 网站标题
    __WebTitle = '广西桂林市公共资源交易中心'
    # 网站地址
    __WebUrl = 'http://glggzy.org.cn/gxglzbw/'
    # 网站节点
    __WebNodes = [
                  '招投标交易动态工作动态',
                  '招投标交易动态行业动态',
                  '通知公告',

                  '政策法规建设工程国家级法律法规',
                  '政策法规建设工程省级政策法规',
                  '政策法规建设工程市级规范性文件',

                  '政策法规政府采购国家级法律法规',
                  '政策法规政府采购省级政策法规',
                  '政策法规政府采购市级规范性文件',

                  '交易信息工程建设招标公告',
                  '交易信息政府采购采购公告'
                  ]
    # 网站定位
    __Websites = __WebNodes
    # 网站节点地址
    __WebNodeUrls = [
                       'http://glggzy.org.cn/gxglzbw/ztbdt/009001/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/ztbdt/009002/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/tzgg/?Paging=%s',

                       'http://glggzy.org.cn/gxglzbw/zcfg/035001/035001001/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/zcfg/035001/035001002/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/zcfg/035001/035001003/?Paging=%s',

                       'http://glggzy.org.cn/gxglzbw/zcfg/035002/035002001/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/zcfg/035002/035002002/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/zcfg/035002/035002003/?Paging=%s',

                       'http://glggzy.org.cn/gxglzbw/jyxx/001001/001001001/?Paging=%s',
                       'http://glggzy.org.cn/gxglzbw/jyxx/001004/001004001/?Paging=%s'
                       ]

    # 第一个Request请求
    def start_requests(self):
        return  [Request(self.__WebUrl, callback=self.parse, method='GET', meta={'cookiejar':1})]

    # 第一个响应
    def parse(self, response):
        # 请求队列
        for WebNode,WebNodeUrl in zip(range(len(self.__WebNodes)),self.__WebNodeUrls):
            yield Request(WebNodeUrl % 1, callback=self.__page_parse, method='GET', meta={'cookiejar': response.meta['cookiejar'], 'WebNode': WebNode, 'page':1})

    # 页面解析
    def __page_parse(self, response):
        try:
            # 抽取所有页面
            papers = response.xpath('//li[@class="ewb-right-item clearfix"]')
            # 抽取页面每一
            for paper in papers:
                # 标题
                Title = paper.xpath('.//a/@title').extract()[0]
                # url
                Url = response.urljoin(paper.xpath('.//a/@href').extract()[0])
                # 日期
                Time = paper.xpath('.//span/text()').extract()[0]
                # 保持到Item（编号，有效性，创建时间，标题，链接，日期，模块，网址地址，网址标题，网站节点，爬取次数）
                item = gxykdx_Item(Id=str(uuid.uuid1()), IsValid=1, CreateDate='DEFAULT', Title=Title, Url=Url, Time=Time, Website=self.__Websites[response.meta['WebNode']], WebUrl=self.__WebUrl, WebTitle=self.__WebTitle, WebNode=self.__WebNodes[response.meta['WebNode']], Count=0)
                # 提交Item，判断URL是否重复
                if hasattr(self, 'mysql_config'):
                    if Url in getattr(self, 'mysql_config'):
                        raise Exception('URL重复，抛出异常！')
                yield item
        except Exception as  e:
            print(e)
        else:
            # 跟进request
            yield Request(url= self.__WebNodeUrls[response.meta['WebNode']] % (response.meta['page'] + 1), callback=self.__page_parse, method='GET', meta={'WebNode': response.meta['WebNode'], 'page': (response.meta['page'] + 1)})